<?php
/**
 * 
 * @author kowal.sylwester
 * 
 * PZRZYKŁAD WPROWADZANYCH DANYCH	
		$koszy = array(
			"SystemID"=>"Sklep",
			"KategoID"=>$kateg[0]['skcID'],
			"KategoNazwa"=>$kateg[0]['skcNazwa'],
			"ProdukID"=>$produ['skpID'],
			"ProdukNazwa"=>$produ['skpNazwa'],
			"ProdukCena"=>$produ['skpCena'],
			"ProdukIlosc"=>1,
			"ProdukJedn"=>$produ['skpJednMia'],
			"ProdukWaluta"=>$produ['skpWaluta'],
			"ProdukStawka"=>$produ['skpStaVat'],
			"ProdukSymbol"=>$produ['skpSymbol'],
			"ProdukPhoto"=>HTTP_URL."photo,/public/users/".str_replace('www.','',$_SERVER['HTTP_HOST'])."/sklep/{$produ['skcID']}_{$produ['skpID']}_produkt.jpg,80,80,100.jpg"
		);
 */
class KoszykController{
	protected $kupujacy; // numer uzytkownika
	protected $koszyk;
	protected $koszykRazem;
	protected $strona;
	public $system;
	public $akcja;
	protected $vars;
	protected $waluta;
	private $DotPayID;
	

		
	function __construct(){
		global $parameters,$config,$objSession;
		$this->koszyk = (is_array($objSession->koszyk)) ? $objSession->koszyk : array();
		$this->strona = $config->page;
		$this->akcja = null;
		$this->vars = (is_string($config->parameters)) ? explode(',',$config->parameters) : array();
		
		if ($config->__isset('waluta') && !empty($config->waluta) ){
			$this->waluta = $config->waluta;			
		}else{
			$this->waluta = (array_key_exists("{$objSession->waluta}",$parameters['koszyk'])) ? $objSession->waluta : "PLN";
		}
		$objSession->waluta = $this->waluta;
		tools::_assign("waluta",$this->waluta);

		
		if ( $objSession->IsLoggedIn()) { 
			$this->kupujacy = $objSession->GetUserObject()->all;
			$this->kupujacy['zalogowany'] = 'tak';
			tools::_assign("kupujacy",$this->kupujacy);
		}else{
			$this->kupujacy['zalogowany'] = 'nie';
			tools::_assign("kupujacy",$this->kupujacy);
		}
	}
	
	public function __set($__var, $__val){
		$this->$__var = $__val;
	}
		
	public function dodajDoKoszyka($produkt=null){
		$this->dodajPozycje($produkt);
	}

	/**
	 * okreslenie akcji do wykonania i zapisanie parametrów wykoanaia
	 * @param $akcja_
	 * @return unknown_type
	 */
	public function indexAction($akcja_=null){
		global $config;
		if(is_null($this->akcja) && !is_null($akcja_)) { 
			$this->akcja = $akcja_;
			return;			
		}else {
			$this->vars = (is_string($config->parameters)) ? explode(',',$config->parameters) : array();
			
			if(is_null($this->akcja)) $this->akcja = $this->vars[1];
			
			$this->wykoanjZadanie();
		}		
	}
	
	
	private function wykoanjZadanie(){
		global $objSession,$dispatcher;
		
		// okresl zmienna systemu na ktory zostanie wyslane potwierdzenie zaplaty
		tools::_assign("system",$this->system);
		
		switch($this->akcja){
			
			// pokaż pełną zawartość koszyka
			case 'wyswietl_zawartosc_koszyka':
				$this->przeliczZawartoscKoszyka();
				$this->koszykRazem['KoszykURLZawartosc'] = "{$this->strona},,wyswietl_zawartosc_koszyka.html";
				$this->koszykRazem['KoszykURLWyczysc'] = "{$this->strona},Koszyk,wyzerujKoszyk.html";
				tools::_assign("razemkoszyk",$this->koszykRazem);
				tools::_assign("koszyk",$this->koszyk);
				tools::_display("Koszyk/pokaz_koszyk.tpl");
				break;
			
			// mini koszyk na stronie
			case 'wartosc_koszyka':
				$this->wartoscKoszykaAction();
				break;
				
			// okreslenie sposobu zapłaty, lub formę powiadomienia sprzedawcy o zakupie.	
			case 'okresl_sposob_zaplaty':
				$this->przeliczZawartoscKoszyka();
				$this->koszykRazem['DotPayID'] =  $this->DotPayID;
				$this->koszykRazem['IdentyfikatorTranzakcji'] =   uniqid (date("YmdHis"));
				tools::_assign("razemkoszyk",$this->koszykRazem);
				tools::_assign("koszyk",$this->koszyk);
				
				$system__ = $this->system;
				$dispatcher->$system__->zapiszNowaTranzakcje($this->koszykRazem['IdentyfikatorTranzakcji'],$this->koszyk);
		
				switch(true){
					case ( isset($this->DotPayID) && is_numeric($this->DotPayID) && $this->DotPayID > 0   ):
						tools::_display("Koszyk/platnosci_formularz_na_dotpay.tpl");
						break;
					default :
						tools::_display("Koszyk/platnosci_formularz_na_email.tpl");
						break;
					
				}
				break;
		}
	}
	
	public function wyswietlZawartoscKoszykaAction(){		
		$this->akcja = "wyswietl_zawartosc_koszyka";		
	}
	
	public function wyzerujKoszykAction(){
		global $objSession;
		$this->koszyk = $objSession->koszyk = array();
		$this->akcja = "pokaz_koszyk";
	}
	
	public function zapiszZmianyKoszykaAction(){		
		global $config,$objSession;
		foreach ($this->koszyk as $id => $row) {
			$this->koszyk[$id]['ProdukIlosc'] = $config->ilosc[$id];
		}		
		$objSession->koszyk = $this->koszyk;
		tools::_redirect($config->page.",,wyswietl_zawartosc_koszyka.html",null,0,'php');
	}
	
	public function usunPozycjeZKoszykaAction(){
		global $config,$objSession;
		foreach ($this->koszyk as $id => $row) {
			if($id == $this->vars[2]){
				unset($this->koszyk[$id]);
			}			
		}
		$this->koszyk = array_values($this->koszyk);
		$objSession->koszyk = $this->koszyk;
		tools::_redirect($config->page.",,wyswietl_zawartosc_koszyka.html",null,0,'php');
	}
	
	public function wartoscKoszykaAction(){
		$this->przeliczZawartoscKoszyka();
		$this->koszykRazem['KoszykURLZawartosc'] = "{$this->strona},,wyswietl_zawartosc_koszyka.html";
		$this->koszykRazem['KoszykURLWyczysc'] = "{$this->strona},Koszyk,wyzerujKoszyk.html";
		tools::_assign("razemkoszyk",$this->koszykRazem);
		tools::_assign("koszyk",$this->koszyk);
		tools::_display("Koszyk/koszyk.tpl");
	}
	
	public function wyslijZamowienieSklepuAction(){
		global $config,$dispatcher,$objSession;

		$tresc_zamowienia = "\n\r\n\rNowe zamówienie z strony {$_SERVER['HTTP_HOST']}\n\r\n\rTreść zamówienia:\n\r{$config->opis}\n\r\n\r______________________________\n\rNa kwotę: {$config->kwota} {$config->waluta}\n\r\n\rZamawiający:\n\rImię,nazwisko: {$config->forename} {$config->surname}\n\rUlica:  {$config->street} {$config->street_n1}/{$config->street_n2}\n\rMiejscowość: {$config->postcode} {$config->city}\n\rE-mail: {$config->email}\n\rTelefon: {$config->phone}\n\rNip: {$config->nip}\n\rUwagi: {$config->uwagi}\n\r\n\r\n\r\n---\n\rtreść została wygenerowana automatycznie, prosimy na nią nie odpowiadać.";
		
		$dispatcher->User->byStanowiskoAction('a');
		$admin = $dispatcher->User->all;
		$this->status = (tools::__wiadomosc($config->forename." ".$config->surname,$config->email,$admin['email'],"Nowe zamówienie z dnia".date('Y-m-d H:i:s'),$tresc_zamowienia,'txt')) ? "ok" : "err";
		if($this->status == "ok") {
			$dispatcher->Panel_Komunikaty->msg = "Zamowienie zostao wysane. Dziękujemy.";
			$this->wyzerujKoszykAction();
		}else{
			$dispatcher->Panel_Komunikaty->msg = "Z przyczyn technicznych Państwa zamówienie nie zostao dostarczone - prosimy o kontakt telefoniczny.";
		}
		//tools::_redirect($config->page.".html",null,0,'php');
	}
	
	private function dodajPozycje($produkt){
		global $objSession;
		// weryfikacja struktury i danych
		array_push($this->koszyk,$produkt);
		$objSession->koszyk = ($this->koszyk == null || $this->koszyk == "") ? "..." : $this->koszyk;
	}
	
	private function przeliczZawartoscKoszyka(){
		global $parameters;
		$this->koszykRazem['RazemNetto'] = 0;
		$this->koszykRazem['RazemBrutto'] = 0;
		
		foreach ($this->koszyk as $id => $row) {
			$this->koszyk[$id]['ProdukCenaWal'] = round( $this->koszyk[$id]['ProdukCena']/$parameters[koszyk][$this->waluta],2);
			$this->koszyk[$id]['ProdukCenaBruttoWal'] = round( ($this->koszyk[$id]['ProdukCena'] + (( $this->koszyk[$id]['ProdukCena']*$this->koszyk[$id]['ProdukStawka'])/100))/$parameters[koszyk][$this->waluta],2);
			$this->koszyk[$id]['ProdukWartoscNetto'] = $this->koszyk[$id]['ProdukCenaWal'] * $this->koszyk[$id]['ProdukIlosc'];
			$this->koszyk[$id]['ProdukWartoscBrutto'] = $this->koszyk[$id]['ProdukCenaBruttoWal'] * $this->koszyk[$id]['ProdukIlosc'];
			
			$this->koszykRazem['RazemNetto'] = $this->koszykRazem['RazemNetto'] + $this->koszyk[$id]['ProdukWartoscNetto'];	
			$this->koszykRazem['RazemBrutto'] = $this->koszykRazem['RazemBrutto'] + $this->koszyk[$id]['ProdukWartoscBrutto'];			
		}
		$this->koszykRazem['RazemIloscPozycji'] = count($this->koszyk);
	}
}